package com.draven.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.draven.common.entity.NoteTag;

import java.util.List;

/**
 * 笔记标签Service接口
 * 
 * @author draven
 */
public interface INoteTagService extends IService<NoteTag> {

    /**
     * 查询标签列表
     * 
     * @param tag 标签信息
     * @return 标签列表
     */
    List<NoteTag> selectTagList(NoteTag tag);

    /**
     * 查询标签列表（包含使用次数）
     * 
     * @return 标签列表
     */
    List<NoteTag> selectTagListWithCount();

    /**
     * 根据笔记ID查询标签列表
     * 
     * @param noteId 笔记ID
     * @return 标签列表
     */
    List<NoteTag> selectTagsByNoteId(Long noteId);

    /**
     * 查询热门标签
     * 
     * @param limit 限制数量
     * @return 标签列表
     */
    List<NoteTag> selectHotTags(Integer limit);

    /**
     * 根据标签ID查询标签信息
     * 
     * @param tagId 标签ID
     * @return 标签信息
     */
    NoteTag selectTagById(Long tagId);

    /**
     * 校验标签名称是否唯一
     * 
     * @param tag 标签信息
     * @return 结果
     */
    boolean checkTagNameUnique(NoteTag tag);

    /**
     * 新增标签
     * 
     * @param tag 标签信息
     * @return 结果
     */
    int insertTag(NoteTag tag);

    /**
     * 修改标签
     * 
     * @param tag 标签信息
     * @return 结果
     */
    int updateTag(NoteTag tag);

    /**
     * 批量删除标签
     * 
     * @param tagIds 需要删除的标签ID
     * @return 结果
     */
    int deleteTagByIds(Long[] tagIds);

    /**
     * 删除标签信息
     * 
     * @param tagId 标签ID
     * @return 结果
     */
    int deleteTagById(Long tagId);
}